#include "bsp_adc_sensor.h"
#include "adc.h"

uint32_t ADC_DMA_Value[ADC_NUM] = {0}; // AD采集值

/**
 * @brief  获取电量值
 * @note   0 - 100
 * @retval {uint8_t} 电量
 */
uint8_t Get_Battery_Value(void)
{
  uint32_t adcBt = 0;
  uint8_t bat = 0;

  adcBt = (uint16_t)ADC_DMA_Value[ADC_BAT];
  adcBt = (adcBt * 3300) / 4096;
 
//printf("adcBt: %d\r\n", adcBt);

  /*我们规定最低放电电压为3.51v ,经过分压AD检测到的应该是2.34v*/
  /*我们规定最低放电电压为4.20v ,经过分压AD检测到的应该是2.8v*/
  //计算百分比   满电的时候是2.8v  ,该充电的时候是2.34v, 460是满电2800与没电2340的差
  bat = ((adcBt - 2340) * 100) / 460;

  return (bat > 100) ? 100 : bat;
}

/**
 * @brief  获取AD类型的传感器的数据
 * @note
 * @retval 传感器的数据
 */
uint16_t Get_AD_Sensor_Value(void)
{
  uint16_t ad_sensor_value = 0;
  uint32_t adcValue = 0;

  adcValue = (uint16_t)ADC_DMA_Value[ADC_SENSOR];
  adcValue = (adcValue * 3300) / 4096;

//printf("adcValue: %d\r\n", adcValue);

  ad_sensor_value = (uint16_t)adcValue;
  return ad_sensor_value;
}

/**
 * @brief  将采集的光照传感器的值，转换为
 * @note
 * @retval 光照传感器的Lux值
 */
uint16_t Get_Light_Lux(void)
{
  uint16_t AdcValue = Get_AD_Sensor_Value();
  uint16_t SensorValue = 0;

  /*
   * 跟具光敏电阻的特性电阻--光强是一个曲线。这里模拟分成多段，
   * 进行模拟计算，这个数据不是一个准确的lx值，仅供参考。
   */
  if (AdcValue > 0x7AD)
    AdcValue = 0;
  else if (AdcValue > 0x6E5 && AdcValue <= 0x7AD)
  {
    //    0~188
    //    AdcValue = 188*(AdcValue/(0x7ad-0x6E5));
    SensorValue = (0x7ad - AdcValue);
  }
  else if (AdcValue > 0x63d && AdcValue <= 0x6e5)
  {
    //      0x6E5-0x63d = 168；
    //      189~532 =343
    //      公式为y=kx+b    求的b=3792  k=343/168
    SensorValue = ((343 * AdcValue) / (0x6E5 - 0x63d));
    SensorValue = 3792 - SensorValue;
    //      SensorValue = (0xE40 - ((343*AdcValue)/168));
  }
  else if (AdcValue > 0x5b4 && AdcValue <= 0x63d)
  {
    //   533~1000 = 467;
    //   0x63d-0x5b4 = 137；
    //      公式为y=kx+b    求的b=5976  k=457/137
    SensorValue = 5976 - ((467 * AdcValue) / (0x63d - 0x5b4));
  }
  else if (AdcValue > 0x44b && AdcValue <= 0x5b4)
  {
    //   2865~1001 = 1864;
    //   0x5b4-0x44b = 361；
    //      公式为y=kx+b    求的b=3476  k=1864/361
    SensorValue = 8539 - ((1864 * AdcValue) / (0x5b4 - 0x44b));
  }
  else if (AdcValue >= 0x2d0 && AdcValue <= 0x44b)
  {
    //   3891~2866 = 1025;
    //   0x44b-0x2d0 = 379；
    //      公式为y=kx+b    求的b=9266  k=1025/379
    SensorValue = 5837 - ((1025 * AdcValue) / (0x5b4 - 0x44b));
  }
  else if (AdcValue < 0x3d0)
  {
    SensorValue = 3892;
  }

  return SensorValue;
}
